#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs

if [ ! -d $HIVE_LOG_DIR ]
then
	mkdir -p $HIVE_LOG_DIR
fi

# 检查进程是否运行正常，参数1为进程名$1， 参数2为进程端口$2
function check_process(){
	## 根据进程名$1获取进程号	-v 反选 -i 忽略大小写
 	pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
	## 根据端口号$2获取进程号
	ppid=$(netstat -ntlp 2>/dev/null |grep $2 | awk '{print $7}' | cut -d '/' -f 1)
	## 输出pid
	echo $pid
	## 相等且不为空则正常返回0
	[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}

function hive_start(){
	metapid=$(check_process HiveMetastore 9083)
	cmd="nohup hive --service metastore > $HIVE_LOG_DIR/metastore.log 2>&1 & "
	[ -z "$metapid" ] && eval $cmd || echo "Metastore服务已启动"
	server2pid=$(check_process HiveServer2 10000)
	cmd="nohup hive --service hiveserver2 > $HIVE_LOG_DIR/hiveServer2.log 2>&1 & "
	[ -z "$server2pid" ] && eval $cmd || echo "HiverServer2服务已启动"
}

function hive_stop(){
	metapid=$(check_process HiveMetastore 9083)
        [ "$metapid" ] && kill -9 $metapid || echo "Metastore服务未启动"
        server2pid=$(check_process HiveServer2 10000)
        [ "$server2pid" ] && kill -9 $server2pid || echo "HiverServer2服务未启动"
}

function hive_status(){
	check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常"
	check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常"

}

case $1 in
	"start")
		hive_start
		;;
	"stop")
		hive_stop
		;;
	"status")
		hive_status
		;;
	"restart")
		hive_stop
		sleep 2
		hive_start
		;;
	*)
		echo "Invalid Args!"
		echo 'Usage: '$(basename $0)' start|stop|status|restart'
		;;
esac

